//定制请求的实例

import { ElMessage } from 'element-plus';
//导入状态
import {useTokenStore} from '@/stores/token.js'
//导入axios  npm install axios
import axios from 'axios';
//定义一个变量,记录公共的前缀  ,  baseURL
//const baseURL = 'http://localhost:8080';
const baseURL='/api'//相当于http://localhost:5173/api,即将请求发给前端，通过前端配置代理解决跨域问题（vite.config.js）
//例如前端给后端发一个请求：http://localhost:5173/api/user/register(其实后端没有/api/这个路径)，然后vite.config.js中的配置会将这个请求改成
//先http://localhost:8080/api/user/register
//再http://localhost:8080/user/register
const instance = axios.create({baseURL})

//导入router，实现页面跳转
// import {useRouter} from 'vue-router'
// const router=useRouter()
//上面这样导入会报错：TypeError: Cannot read properties of undefined (reading 'push')
import router from '@/router/index.js'
//添加响应拦截器
instance.interceptors.response.use(
    result=>{
        //判断业务状态码
        if(result.data.code===0){
        console.log(result.data)
        return result.data
        }
        //alert(result.data.message?result.data.message:"服务器异常")
        ElMessage.error(result.data.message?result.data.message:"服务器异常")//漂亮的提示框
        //异步操作状态转换为失败
        return Promise.reject(result.data)
    },
    err=>{
        //响应码401表示未登录，给出相应提示，并跳转到登录页
        if(err.response.status===401)
        {
            ElMessage.error("请先登录！")
            router.push('/login')
        }
        else
            ElMessage.error("服务器异常")
        //alert('服务异常'+'request.js');
        return Promise.reject(err);//异步的状态转化成失败的状态
    }
)
//添加请求拦截器
instance.interceptors.request.use(
    (config)=>{
        //请求前的回调
        //给请求头添加token
        //在pinia中定义的响应式数据都不需要.value，可以直接使用
         //获取token状态
        const tokenStore=useTokenStore()
        console.log("获取分类列表请求"+tokenStore.token)
        if(tokenStore.token){
            config.headers.Authorization=tokenStore.token
        }
        return config
    },
    (err)=>{
        //请求错误的回调
        Promise.reject(err)
    }
)

export default instance;